package com.zy.函数式编程.递归

import scala.annotation.tailrec

object Test {

  def main(args: Array[String]): Unit = {

    // 计算n的阶乘  普通递归
    def compute(n: Int): Int = {
      if (n == 1) return 1
      n * compute(n - 1)
    }

    println(compute(5))


    // 尾递归优化
    // 尾递归让递归时栈内不再积压，一个函数压入、调用、弹出 -> 函数压入、调用、弹出

    // 使用tailrec标识被尾递归优化的函数，如果非尾递归编译会报错
    @tailrec
    def computeTailFact(n: Int, result: Int): Int = {
      if (n == 1) return result
      computeTailFact(n - 1, result * n)
    }

    println(computeTailFact(5, 1))
  }

}
